package com.ysstech.common.util;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;

@Slf4j
public class StringUtil {


    /**
     * 检查字符串是否包含比对字符集，如果包含其中一个就返回true，否则返回false
     *
     * @param str  String     被检查字符串
     * @param arys String    比对字符集(多个字符串用英文逗号间隔)
     * @return boolean
     */
    public static boolean oneOf(String str, String arys) {
        if (StringUtils.isBlank(str) || StringUtils.isBlank(arys)) {
            return false;
        }
        return oneOf(str, arys.split(","));
    }

    /**
     * 查字符串是否包含比对字符集，如果包含其中一个就返回true，否则返回false
     *
     * @param str
     * @param arry
     * @return
     */
    public static boolean oneOf(String str, String[] arry) {
        if (StringUtils.isBlank(str) || arry == null || arry.length == 0) {
            return false;
        }
        for (int i = 0; i < arry.length; i++) {
            if (str.indexOf(arry[i]) > -1)
                return true;
        }
        return false;
    }

    /**
     * 检查字符串是否等于比对字符集，如果等于其中一个就返回true，否则返回false
     *
     * @param str  String     被检查字符串
     * @param arys String    比对字符集(多个字符串用英文逗号间隔)
     * @return boolean
     */
    public static boolean oneCase(String str, String arys) {
        if (StringUtils.isBlank(str) || StringUtils.isBlank(arys)) {
            return false;
        }
        return oneCase(str, arys.split(","));
    }

    /**
     * 检查字符串是否等于比对字符集，如果等于其中一个就返回true，否则返回false
     *
     * @param str
     * @param arry
     * @return
     */
    public static boolean oneCase(String str, String[] arry) {
        if (StringUtils.isBlank(str) || arry == null || arry.length == 0) {
            return false;
        }
        for (int i = 0; i < arry.length; i++) {
            if (str.equals(arry[i]))
                return true;
        }
        return false;
    }

    /**
     * 判断是不是数字
     *
     * @param str
     * @return
     */
    public static Integer getInteger(String str) {
        Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");
        if (StringUtils.isNotBlank(str) && pattern.matcher(str).matches()) {
            return Integer.valueOf(str);
        } else {
            return null;
        }
    }

    public static Long getLong(String str) {
        Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");
        if (StringUtils.isNotBlank(str) && pattern.matcher(str).matches()) {
            return Long.valueOf(str);
        } else {
            return null;
        }
    }

    /**
     * @param data 指定字符串
     * @param str  需要定位的特殊字符或者字符串
     * @param num  第n次出现
     * @return 第n次出现的位置索引
     */
    public static int getIndexOf(String data, String str, int num) {
        Pattern pattern = Pattern.compile(str);
        Matcher findMatcher = pattern.matcher(data);
        //标记遍历字符串的位置
        int indexNum = 0;
        while (findMatcher.find()) {
            indexNum++;
            if (indexNum == num) {
                break;
            }
        }
        log.info("字符或者字符串" + str + "第" + num + "次出现的位置为：" + findMatcher.start());
        return findMatcher.start();
    }

}
